/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Montenegro
 */
import java.util.InputMismatchException;
import java.util.Scanner;

public class Driver {

    public static void main(String[] args) {
        // TODO code application logic here
        Scanner input = new Scanner(System.in);
        Pila<Integer> stack = new Pila();
        
        String error = "La pila se encuentra vacia.";
        int opcion1, opcion2, operador, operando, resultado, num1, num2;
        
        do{
            menu();
            opcion1 = (int)obtenerNumero("Ingrese su opcion: ", false);
            switch(opcion1){
                case 1:
                    System.out.println("Ingrese el primer numero entero.");
                    operador = input.nextInt();
                    stack.push(operador);
                    System.out.println("Ingrese el segundo numero entero.");
                    operando = input.nextInt();
                    stack.push(operando);
                    do{
                        submenu();
                        opcion2 = (int)obtenerNumero("Ingrese su opcion: ", false);
                        switch(opcion2){
                            case 1:
                                num1 = stack.pop();
                                num2 = stack.pop();
                                resultado = num1 + num2;
                                stack.push(resultado);
                                System.out.println("El resultado es: ");
                                System.out.println(""+resultado);
                                opcion2 = -2;
                                break;
                            case 2:
                                num1 = stack.pop();
                                num2 = stack.pop();
                                resultado = num1 - num2;
                                stack.push(resultado);
                                System.out.println("El resultado es: ");
                                System.out.println(""+resultado);
                                opcion2 = -2;
                                break;
                            case 3:
                                num1 = stack.pop();
                                num2 = stack.pop();
                                resultado = num1 * num2;
                                stack.push(resultado);
                                System.out.println("El resultado es: ");
                                System.out.println(""+resultado);
                                opcion2 = -2;
                                break;
                            case 4:
                                num1 = stack.pop();
                                num2 = stack.pop();
                                resultado = num1 / num2;
                                stack.push(resultado);
                                System.out.println("El resultado es: ");
                                System.out.println(""+resultado);
                                opcion2 = -2;
                                break;
                            case 5:
                                opcion2 = -2;
                        }
                    }while (opcion2 != -2);
                    break;
                case 2:
                    if(stack.empty()){
                        System.out.println(error);
                    }
                    else{
                        System.out.println("Ingrese el segundo operando numero entero. ");
                        operando = input.nextInt();
                        stack.push(operando);
                        do{
                            submenu();
                            opcion2 = (int)obtenerNumero("Ingrese su opcion: ", false);
                            switch(opcion2){
                                case 1:
                                    num1 = stack.pop();
                                    num2 = stack.pop();
                                    resultado = num1 + num2;
                                    stack.push(resultado);
                                    System.out.println("El resultado es: ");
                                    System.out.println(""+resultado);
                                    opcion2 = -2;
                                    break;
                                case 2:
                                    num1 = stack.pop();
                                    num2 = stack.pop();
                                    resultado = num1 - num2;
                                    stack.push(resultado);
                                    System.out.println("El resultado es: ");
                                    System.out.println(""+resultado);
                                    opcion2 = -2;
                                    break;
                                case 3:
                                    num1 = stack.pop();
                                    num2 = stack.pop();
                                    resultado = num1 * num2;
                                    stack.push(resultado);
                                    System.out.println("El resultado es: ");
                                    System.out.println(""+resultado);
                                    opcion2 = -2;
                                    break;
                                case 4:
                                    num1 = stack.pop();
                                    num2 = stack.pop();
                                    resultado = num1 / num2;
                                    stack.push(resultado);
                                    System.out.println("El resultado es: ");
                                    System.out.println(""+resultado);
                                    opcion2 = -2;
                                    break;
                                case 5:
                                    opcion2 = -2;
                            }
                        }while (opcion2 != -2);
                    }
                    break;
                case 3:
                    opcion1 = -1;
                    break;
            }
        }while(opcion1 != -1);
    }
    
    public static void menu(){
        System.out.println();
        System.out.println("+--         MENU DE OPCIONES         --+");
        System.out.println("| 1. Ingresar valores.                 |");
        System.out.println("| 2. Continuar con otra operacion.     |");
        System.out.println("| 3. Salir.                            |");
        System.out.println("+--------------------------------------+");
    }
    
    public static void submenu(){
        System.out.println();
        System.out.println("+--     MENU DE OPERACIONES     --+");
        System.out.println("| 1. Suma.                        |");
        System.out.println("| 2. Resta.                       |");
        System.out.println("| 3. Multiplicacion               |");
        System.out.println("| 4. Division                     |");
        System.out.println("| 5. Regresar                     |");
        System.out.println("+---------------------------------+");
    } 
    
    public static double obtenerNumero(String mensaje, boolean mostrar){
        Scanner ingreso = new Scanner(System.in);
        double  choice = -1;
        
        System.out.print(mensaje);
        try{
            choice = ingreso.nextDouble();
        }
        catch(InputMismatchException exception){
            if (mostrar)
                System.out.println("\nINGRESE ALGUNA OPCION DEL MENU!!!!!\n");
        }
        finally{
            ingreso.nextLine();
        }
        return choice;
    }
}
